// 配置路由
import { createRouter, createWebHashHistory, createWebHistory, RouteRecordRaw } from "vue-router";

import { store } from "@/store";
import { loginByToken } from "@/api/ApiPath";
import { ElMessage } from "element-plus";
// 配置路由地址/
const routes: Array<RouteRecordRaw> = [
  {
    path: '/login',
    component: () => import("@/view/login.vue")
  },


]

// 定义 meta 类型
declare module 'vue-router' {
  interface RouteMeta {
    title: string,
    icon?: string,
    permission: string,
  }
}


const router = createRouter({
  history: createWebHistory(),
  routes,
})


// 路由守卫
router.beforeEach((to, from, next) => {
  const token = localStorage.getItem('token')
  // 判断当 store 里面没有token 或者 缓存里面没有token 说明没有登录
  if (!store.state.authState.token && !token) {
    // 如果 去往的是 登录界面 就放行
    if (to.path.startsWith('/login'))
      next()
    // 没有登录 提醒登录
    else {
      ElMessage.error('请先登录！');
      next('/login')
    }
    // 如果是后台登录过期 就重新登录
  } else if (!store.state.authState.token && token) {
    loginByToken(token).then(res => {
      if (res.data.status) {
        store.commit('authState/addUserInfo', res.data)
        // 传入所有的 用户路径
        store.dispatch('menuState/generateSysmenuList', res.data.permissions)
        // 传入 用户权限按钮
        store.dispatch('buttonState/generateButtons', res.data.permissions)
        if (to.matched.length == 0) {
          router.push(to.path)
        }
        next()
      } else {
        next('/login')
      }
    })
    // 传入 用户所有权限菜单路径
  }
  else {
    next()
  }
})
export default router

